/**
 * 网站图标（Favicon）工具函数
 */

/**
 * 从URL中提取主机名
 * @param {string} url - 网站URL
 * @returns {string} 主机名
 */
export const getHostname = (url) => {
  try {
    return new URL(url).hostname;
  } catch (e) {
    return '';
  }
};

/**
 * 获取网站图标URL
 * @param {string} url - 网站URL
 * @param {string} size - 图标大小，默认为16x16
 * @returns {string} 网站图标URL
 */
export const getFaviconUrl = (url, size = '16') => {
  if (!url) return '';
  
  const hostname = getHostname(url);
  if (!hostname) return '';
  
  // 使用Google的favicon服务
  return `https://www.google.com/s2/favicons?domain=${hostname}&sz=${size}`;
};

/**
 * 获取高质量网站图标URL（尝试获取更大尺寸的图标）
 * @param {string} url - 网站URL
 * @returns {string} 高质量网站图标URL
 */
export const getHighQualityFaviconUrl = (url) => {
  return getFaviconUrl(url, '128');
};

/**
 * 尝试多种方式获取网站图标
 * @param {string} url - 网站URL
 * @returns {Promise<string>} 网站图标URL
 */
export const getBestFavicon = async (url) => {
  if (!url) return '';
  
  const hostname = getHostname(url);
  if (!hostname) return '';
  
  // 1. 首先尝试网站根目录下的favicon.ico
  const rootFavicon = `https://${hostname}/favicon.ico`;
  
  try {
    // 检查是否存在
    const response = await fetch(rootFavicon, { method: 'HEAD' });
    if (response.ok) {
      return rootFavicon;
    }
  } catch (e) {
    // 如果出错，继续尝试其他方法
  }
  
  // 2. 返回Google的favicon服务（作为备选）
  return getHighQualityFaviconUrl(url);
};

/**
 * 检查网站是否有图标
 * @param {string} url - 网站URL
 * @returns {Promise<boolean>} 是否有图标
 */
export const hasFavicon = async (url) => {
  try {
    const faviconUrl = await getBestFavicon(url);
    const response = await fetch(faviconUrl, { method: 'HEAD' });
    return response.ok;
  } catch (e) {
    return false;
  }
}; 